{"version":3,"file":"static/chunks/pages/[[...brandSlug]]-52c80a301e09e5bb.js","mappings":"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","sources":["webpack://_N_E/?5919","webpack://_N_E/./components/GatedModal.tsx","webpack://_N_E/./pages/[[...brandSlug]].tsx","webpack://_N_E/./utils/constants.ts"],"sourcesContent":["\n    (window.__NEXT_P = window.__NEXT_P || []).push([\n      \"/[[...brandSlug]]\",\n      function () {\n        return require(\"private-next-pages/[[...brandSlug]].tsx\");\n      }\n    ]);\n    if(module.hot) {\n      module.hot.dispose(function () {\n        window.__NEXT_P.push([\"/[[...brandSlug]]\"])\n      });\n    }\n  ","import { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport classnames from 'classnames';\n\nimport { SecurityDialog } from '@dx-ui/osc-marketing';\n\nexport function GatedModal({ domains }: { domains?: string[] }) {\n  const [isVisible, setIsVisible] = useState(Array.isArray(domains) ? domains?.length > 0 : false);\n\n  if (!Array.isArray(domains) || domains.length < 1) {\n    return null;\n  }\n\n  return (\n    <SecurityDialog\n      content={<GatedModalContent domains={domains} onSubmit={() => setIsVisible(false)} />}\n      isOpen={isVisible}\n      size=\"sm\"\n      title=\"Exclusive Offers\"\n    />\n  );\n}\n\ntype FormData = {\n  email: string;\n};\n\nexport function GatedModalContent({\n  domains,\n  onSubmit,\n}: {\n  domains: string[];\n  onSubmit: () => void;\n}) {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n  } = useForm<FormData>();\n\n  const handleEmailValidation = (email: string) => {\n    return domains.some((domain) => email.toLowerCase().includes(domain.toLowerCase()));\n  };\n\n  return (\n    <>\n      {errors.email ? (\n        <div id=\"email-error\" className=\"bg-danger-alt flex justify-around p-2\">\n          <span className=\"text-danger mx-8 text-lg font-bold\">\n            Please enter a valid email or company code to access offers.\n          </span>\n        </div>\n      ) : null}\n      <p className=\"p-2 font-sans\">\n        Enter your employee email or company code to access exclusive discounts.\n      </p>\n      <form onSubmit={handleSubmit(onSubmit)} method=\"POST\">\n        <label\n          aria-label=\"Enter your employee email or company code to access exclusive discounts.\"\n          className={classnames('label w-full font-bold', { 'label-error': !!errors.email })}\n          htmlFor=\"gated-email\"\n        >\n          Email Address or Company Code\n          <input\n            aria-describedby={errors.email ? 'email-error' : undefined}\n            aria-invalid={!!errors.email}\n            className={classnames('form-input my-2 block', {\n              'form-error': !!errors.email,\n            })}\n            id=\"gated-email\"\n            {...register('email', { required: true, validate: handleEmailValidation })}\n            required\n          />\n        </label>\n\n        <button className=\"btn btn-2xl btn-primary mb-4 block w-full\" type=\"submit\">\n          Access Offers\n        </button>\n      </form>\n    </>\n  );\n}\n","import { usePreviewSegmentsFromUrl } from '@dx-ui/cpm-mapping-shared';\nimport type { CpmData } from '@dx-ui/cpm-mapping-brands';\nimport { CpmPage, fetchServerCpmPage, FetchServerCpmPage404Error } from '@dx-ui/cpm-mapping-brands';\nimport { isGatedPage, getAccountIdFromPath } from '../utils/gated-page';\nimport type { GetServerSideProps, GetServerSidePropsContext } from 'next';\nimport { getParams } from '../utils/get-params';\nimport { type QueryClient, dehydrate } from '@tanstack/react-query';\nimport { SHOP_FORM_ORIGINAL_OP_NAMES, getServerSideShopFormData } from '@dx-ui/osc-shop-form';\nimport type { GetCompanyByAccountIdQuery } from '../generated/types';\nimport {\n  serverSideGatedPagesQuery,\n  serverSideGetCompanyByAccountIdQuery,\n} from '../generated/react-query';\nimport { GatedModal } from '../components/GatedModal';\nimport type { FeatureToggle } from '@dx-ui/gql-types';\nimport {\n  GET_LANGUAGE_SELECTOR_ONE_LINK_CONFIG_DOCUMENT_ORIGINAL_OP_NAME,\n  serverSideGetLanguageSelectorOneLinkConfigQuery,\n} from '@dx-ui/queries-osc-language-selector';\nimport {\n  getBrandSlugConfig,\n  getCommonServerSideFetches,\n  getCommonServerSidePostFetches,\n} from '../utils/common-server-side-fetches';\nimport { logVisitorId } from '../utils/logging';\nimport { getBrandRefreshProps } from '@dx-ui/framework-theme';\nimport { BRAND_SLUG_TOGGLE_NAME } from '../utils/default-brand-config';\nimport { logError, logInfo } from '@dx-ui/framework-logger';\nimport { getIsPortfolioHomePage } from '../utils/isPortfolioHomePage';\nimport { getAppVersion } from '../utils/constants';\nimport { useInitializeConductrics } from '@dx-ui/osc-brands-wrappers';\nimport type { BrandQuery } from '@dx-ui/osc-brands-data';\n\ninterface SuccessProps {\n  brandCode: string;\n  brandData: BrandQuery['brand'] | null;\n  cpmData: CpmData;\n  gatedData: GetCompanyByAccountIdQuery | null;\n  localeCode: string;\n}\n\nasync function fetchCpmDataAndGatedData(\n  queryClient: QueryClient,\n  ctx: GetServerSidePropsContext,\n  contentPath: string,\n  localeCode: string\n): Promise<[GetCompanyByAccountIdQuery | null, CpmData | null]> {\n  const [gatedPagesConfig, cpmData] = await Promise.all([\n    serverSideGatedPagesQuery(queryClient),\n    fetchServerCpmPage({\n      contentPath,\n      localeCode,\n      pathname: ctx.resolvedUrl,\n      queryClient,\n    }).catch((error: unknown) => {\n      if (error instanceof FetchServerCpmPage404Error) {\n        console.error(error.message, JSON.stringify(error.variables)); // eslint-disable-line no-console\n        logInfo('Cpm Not Found', error.message);\n        return null;\n      }\n\n      console.error('Error in fetchServerCpmPageWithSupportedLanguages', error); // eslint-disable-line no-console\n      logError('Cpm Fetch Error', 'fetchServerCpmPageWithSupportedLanguages', ctx.req.url);\n      throw error;\n    }),\n  ]);\n\n  /**\n   * Data for gated pages\n   */\n\n  let gatedData = null;\n\n  if (isGatedPage(contentPath, gatedPagesConfig.featureConfigs?.[0]?.config)) {\n    const accountId = getAccountIdFromPath(contentPath);\n\n    if (!accountId) {\n      throw new Error('invalid URL');\n    }\n\n    gatedData = await serverSideGetCompanyByAccountIdQuery(queryClient, {\n      accountid: accountId,\n      language: localeCode,\n    }).catch((error: unknown) => {\n      console.error('Error fetching serverSideGetCompanyByAccountIdQuery', error); // eslint-disable-line no-console\n      logError('Cpm Fetch Error', 'serverSideGetCompanyByAccountIdQuery', ctx.req.url);\n\n      return null;\n    });\n  }\n\n  return [gatedData, cpmData];\n}\n\nexport const getServerSideProps: GetServerSideProps<SuccessProps> = async (ctx) => {\n  try {\n    logVisitorId(ctx);\n\n    const commonFetches = await getCommonServerSideFetches(ctx);\n    if ('notFound' in commonFetches) return commonFetches;\n    const {\n      queryClient,\n      localeCode,\n      translations,\n      oneLinkProps,\n      sstLocale,\n      featureTogglesConfigs,\n    } = commonFetches;\n\n    const routePath = ctx.resolvedUrl;\n    const isPortfolioHomePage = getIsPortfolioHomePage(routePath);\n    const showLanguageSelector = isPortfolioHomePage;\n    const brandSlugConfig = getBrandSlugConfig(featureTogglesConfigs);\n\n    if (!brandSlugConfig) {\n      throw new Error(\n        `Failed Fetching toggle ${BRAND_SLUG_TOGGLE_NAME}, value missing or misconfigured`\n      );\n    }\n\n    const featureToggles = featureTogglesConfigs?.featureToggles || [];\n    const { contentPath, redirectPath } = getParams({\n      brandSlugConfig,\n      localeCode,\n      reqPath: ctx.resolvedUrl,\n    });\n\n    await getServerSideShopFormData(queryClient, { getTranslateAutocomplete: true }).catch((e) => {\n      console.error('Error fetching serverSideShopFormData', e); // eslint-disable-line no-console\n      logError('Cpm Fetch Error', 'serverSideShopFormData', ctx.req.url);\n    });\n\n    if (contentPath === undefined) {\n      return { notFound: true };\n    }\n\n    if (localeCode === undefined) {\n      return { notFound: true };\n    }\n\n    const [gatedData, cpmData] = await fetchCpmDataAndGatedData(\n      queryClient,\n      ctx,\n      contentPath,\n      localeCode\n    );\n\n    // Handle 404 = cpmData will be null\n    if (cpmData === null) {\n      return { notFound: true };\n    }\n\n    const brandCode = cpmData.mappedPage.brandCode;\n    const { brandData } = await getCommonServerSidePostFetches(queryClient, localeCode, brandCode);\n\n    if (redirectPath) {\n      return {\n        redirect: {\n          statusCode: 301,\n          destination: `/${sstLocale}${redirectPath}`,\n        },\n      };\n    }\n\n    if (showLanguageSelector) {\n      await serverSideGetLanguageSelectorOneLinkConfigQuery(queryClient).catch((error) => {\n        console.log('Error in serverSideGetLanguageSelectorOneLinkConfigQuery', error); // eslint-disable-line no-console\n        logError('Cpm Fetch Error', 'serverSideGetLanguageSelectorOneLinkConfigQuery', ctx.req.url);\n        return null;\n      });\n    }\n\n    // Limit the number of hosts that are allowed to embed your application.\n    // @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors\n    ctx?.res?.setHeader('Content-Security-Policy', `frame-ancestors 'self'`);\n\n    const dehydratedQueryKeyOperationNames = [\n      ...SHOP_FORM_ORIGINAL_OP_NAMES,\n      GET_LANGUAGE_SELECTOR_ONE_LINK_CONFIG_DOCUMENT_ORIGINAL_OP_NAME,\n    ];\n\n    return {\n      props: {\n        brandCode,\n        brandData,\n        cpmData,\n        // Added contentPath for easier debugging\n        contentPath: cpmData.contentPath,\n        gatedData,\n        localeCode,\n        featureToggles,\n        dehydratedQueryState:\n          // JSON.parse(JSON.stringify()) is hack to serialize undefined\n          // https://github.com/TanStack/query/issues/1458#issuecomment-788447705\n          JSON.parse(\n            JSON.stringify(\n              dehydrate(queryClient, {\n                shouldDehydrateQuery: (query) => {\n                  const queryKey = query.queryKey[0] as { originalOpName?: string };\n                  return dehydratedQueryKeyOperationNames.includes(queryKey?.originalOpName || '');\n                },\n              })\n            )\n          ),\n        ...translations,\n        ...oneLinkProps,\n        ...getBrandRefreshProps({ featureToggles, brandCode }),\n      },\n    };\n  } catch (error) {\n    // eslint-disable-next-line no-console\n    console.error(`Something went wrong when retrieving data for ${ctx.req.url}`);\n    // eslint-disable-next-line no-console\n    console.dir(error, { depth: null });\n\n    logError('Cpm Fetch Error', 'getServerSideProps', ctx.req.url);\n    throw error;\n  }\n};\n\ninterface LivePageProps {\n  brandCode: string;\n  brandData: BrandQuery['brand'];\n  cpmData: CpmData;\n  gatedData: GetCompanyByAccountIdQuery | null;\n  localeCode: string;\n  featureToggles: FeatureToggle[];\n}\n\nfunction LivePage({\n  brandCode,\n  brandData,\n  cpmData,\n  gatedData,\n  localeCode,\n  featureToggles,\n}: LivePageProps): JSX.Element {\n  useInitializeConductrics([`Brand:${brandCode}`]);\n  const previewSegments = usePreviewSegmentsFromUrl();\n\n  return (\n    <>\n      <CpmPage\n        brandCode={brandCode}\n        brandData={brandData}\n        cpmData={cpmData}\n        corporateAccount={gatedData}\n        localeCode={localeCode}\n        featureToggles={featureToggles}\n        previewSegments={previewSegments}\n        appVersion={getAppVersion()}\n      />\n      {gatedData ? <GatedModal domains={gatedData?.altCorporateAccount?.domains} /> : null}\n    </>\n  );\n}\n\nexport default LivePage;\n","import { env } from '@dx-ui/framework-env';\n\nexport const getAppVersion = () => env('APP_VER', 'dx-brands-ui:0');\n"],"names":["GatedModal","domains","useState","Array","isArray","length","isVisible","setIsVisible","SecurityDialog","content","GatedModalContent","onSubmit","isOpen","size","title","useForm","register","handleSubmit","formState","errors","email","div","id","className","span","p","form","method","label","aria-label","classnames","htmlFor","input","aria-describedby","undefined","aria-invalid","required","validate","handleEmailValidation","some","domain","toLowerCase","includes","button","type","LivePage","gatedData","brandCode","brandData","cpmData","localeCode","featureToggles","useInitializeConductrics","previewSegments","usePreviewSegmentsFromUrl","CpmPage","corporateAccount","appVersion","getAppVersion","altCorporateAccount","env"],"sourceRoot":"","ignoreList":[]}